08. 练习

练习

现在你可以使用 C++ 来编写程序了。

练习是提高 C++ 技能的最佳方式。我们提供了一些说明来帮助你入手。这一次,我们并没有配置代码编写栏,因此你需要在你的电脑本地进行程序编译和运行。

这些练习并不打分,因此你可以自行决定完成多少。在 C++ 基础的课程结尾,我们会有一个更加全面的项目,要求你将 Python 代码翻译成 C++ 代码。

如果你遇到了困难,不确定如何编写某段代码,或是不知道怎样解决一个错误,你可以使用 Google 或是 Bing 等搜索引擎。你可以直接复制粘贴错误信息,通常情况下,早已有人详细解释了这些错误是什么,以及如何解决它们。

练习 1

在机器人定位的课程中,Sebastian Thrun 已经带领你了解了一维机器人传感和运动的 Python 代码。最后你得到了一个 sense() 函数,它基于传感器的测量数据来更新概率。你也得到了一个 move() 函数,它根据机器人在网格中的运动更新概率。

现在请将下面的 Python 代码翻译成 C++ 代码:

p = [0.2, 0.2, 0.2, 0.2, 0.2]
world = ['green', 'red', 'red', 'green', 'green']
measurements = ['red', 'green']
motions = [1,1]
pHit = 0.6
pMiss = 0.2
pExact = 0.8
pOvershoot = 0.1
pUndershoot = 0.1

def sense(p, Z):
    q=[]
    for i in range(len(p)):
        hit = (Z == world[i])
        q.append(p[i] * (hit * pHit + (1-hit) * pMiss))
    s = sum(q)
    for i in range(len(q)):
        q[i] = q[i] / s
    return q

def move(p, U):
    q = []
    for i in range(len(p)):
        s = pExact * p[(i-U) % len(p)]
        s = s + pOvershoot * p[(i-U-1) % len(p)]
        s = s + pUndershoot * p[(i-U+1) % len(p)]
        q.append(s)
    return q

for k in range(len(measurements)):
    p = sense(p, measurements[k])
    p = move(p, motions[k])

print p         

练习 2

请编写一个含有两个矩阵的 C++ 函数,并输出它们的乘积。你需要保证在这个函数中,两个矩阵可以相乘。如果矩阵一是 m 行 n 列,矩阵二是 w 行 z 列,那么 n 必须等于 w, 而最终得到的矩阵是 m 行 z 列。